/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import MODEL.Funcionario;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author MatheuseJessica
 */
public class DaoFuncionario extends Banco{
    
    public DaoFuncionario(){
        connection = Conecta();
    }
    
    public List<Funcionario> getFuncionario(){
        
        List<Funcionario> funcionario = new ArrayList<Funcionario>();
        try{
            Statement stm = Conecta().createStatement();
            String SQL = "SELECT * FROM funcionario";
            ResultSet rs = stm.executeQuery(SQL);
            
            while (rs.next()){
                Funcionario func = new Funcionario();
                
                func.setCodigo(rs.getInt("cod_funcionario"));
                func.setNome(rs.getString("nome"));
                func.setCpf(rs.getString("cpf"));
                func.setRg(rs.getString("rg"));
                func.setRua(rs.getString("rua"));
                func.setBairro(rs.getString("bairro"));
                func.setCidade(rs.getString("cidade"));
                func.setNumero(rs.getString("numero"));
                func.setTelefone(rs.getString("telefone"));
                func.setSexo(rs.getString("sexo"));
                func.setData_contrato(rs.getDate("data_contrato"));
                func.setData_nascimento(rs.getDate("data_nascimento"));
                func.setSalario(rs.getDouble("salario"));
                func.setUser(rs.getString("user"));
                func.setSenha(rs.getString("senha"));
                DaoCargo dc = new DaoCargo();
                func.setCargo(dc.getCargo(rs.getInt("cod_cargo")));
                funcionario.add(func);
            }    
        }catch(Exception ex){
            
        }finally{
            Fecha();
        }
        
        return funcionario;
    }
    
    public Funcionario getFuncionario(int cod_funcionario){
        
        Funcionario func = new Funcionario();
        try{
            Statement stm = Conecta().createStatement();
            String SQL = "SELECT * FROM funcionario WHERE cod_funcionario="+cod_funcionario;
            ResultSet rs = stm.executeQuery(SQL);
            
            while (rs.next()){
                func.setCodigo(rs.getInt("cod_funcionario"));
                func.setNome(rs.getString("nome"));
                func.setCpf(rs.getString("cpf"));
                func.setRg(rs.getString("rg"));
                func.setRua(rs.getString("rua"));
                func.setBairro(rs.getString("bairro"));
                func.setCidade(rs.getString("cidade"));
                func.setNumero(rs.getString("numero"));
                func.setTelefone(rs.getString("telefone"));
                func.setSexo(rs.getString("sexo"));
                func.setData_contrato(rs.getDate("data_contrato"));
                func.setData_nascimento(rs.getDate("data_nascimento"));
                func.setSalario(rs.getDouble("salario"));
                func.setUser(rs.getString("user"));
                func.setSenha(rs.getString("senha"));
                DaoCargo dc = new DaoCargo();
                func.setCargo(dc.getCargo(rs.getInt("cod_cargo")));
            }    
        }catch(Exception ex){
            
        }finally{
            Fecha();
        }
        
        return func;
    }
    
    public Funcionario getLogin(String user, String senha){
        
        Funcionario func = new Funcionario();
        try{
            Statement stm = Conecta().createStatement();
            String SQL = "SELECT * FROM funcionario WHERE user='"+user+"'";
            ResultSet rs = stm.executeQuery(SQL);
            
            while (rs.next()){
                
                func.setSenha(rs.getString("senha"));
                
                if(func.getSenha().equals(senha)){
                    func.setCodigo(rs.getInt("cod_funcionario"));
                    func.setNome(rs.getString("nome"));
                    func.setCpf(rs.getString("cpf"));
                    func.setRg(rs.getString("rg"));
                    func.setRua(rs.getString("rua"));
                    func.setBairro(rs.getString("bairro"));
                    func.setCidade(rs.getString("cidade"));
                    func.setNumero(rs.getString("numero"));
                    func.setTelefone(rs.getString("telefone"));
                    func.setSexo(rs.getString("sexo"));
                    func.setData_contrato(rs.getDate("data_contrato"));
                    func.setData_nascimento(rs.getDate("data_nascimento"));
                    func.setSalario(rs.getDouble("salario"));
                    func.setUser(rs.getString("user"));
                    DaoCargo dc = new DaoCargo();
                    func.setCargo(dc.getCargo(rs.getInt("cod_cargo")));
                }
            }    
        }catch(Exception ex){
            
        }finally{
            Fecha();
        }
        
        return func;
    }
    
    public void insere_Funcionario(Funcionario func){
        try{
            java.sql.Date data;
            String SQL = "INSERT INTO funcionario VALUES(default,?,?,?,?,?,?,?,?,?,NOW(),NOW(),?,?,?,?)";
            PreparedStatement stmt = Conecta().prepareStatement(SQL);
            stmt.setString(1, func.getNome());
            stmt.setString(2, func.getCpf());
            stmt.setString(3, func.getRg());
            stmt.setString(4, func.getRua());
            stmt.setString(5, func.getBairro());
            stmt.setString(6, func.getCidade());
            stmt.setString(7, func.getNumero());
            stmt.setString(8, func.getTelefone());
            stmt.setString(9, func.getSexo());
//            stmt.setDate(10, (java.sql.Date) func.getData_contrato());
//            stmt.setDate(11, (java.sql.Date) func.getData_nascimento());
            stmt.setDouble(10, func.getSalario());
            stmt.setString(11, func.getUser());
            stmt.setString(12, func.getSenha());
            stmt.setInt(13, func.getCargo().getCodigo());
            stmt.execute();
            stmt.close();
        }catch(Exception e){
            System.out.println("Insere func: " + e);
            JOptionPane.showMessageDialog(null, "CPF ou Nome de usuario já existe no Banco de Dados");
            e.printStackTrace();
        }finally{
            Fecha();
        }
    }
}
